1. Field of the Invention
The present invention relates to the field of dynamic caching and, more particularly, to exposing internal dynamic caching services of a Web-based application server to remote components.
2. Description of the Related Art
Caching is a technique of temporarily storing frequently accessed data in random access memory (RAM) or in a special area of a hard disk drive, to reduce the time required to read and write data. Server-side caching techniques are often used to improve performance of Web applications. Conventional solutions for caching static content have resulted in excellent performance gains for many Web applications. Unfortunately, these caching solutions are of little to no value in enhancing the performance of Web applications with dynamically generated content. For dynamic content caching to be effective, dynamic content or data, which is by definition subject to change, must be stable over a long enough time for meaningful reuse to occur. If access is frequent, even a short period of stability can provide a significant enough performance increase to warrant data caching.
International Business Machine (IBM), Corporation of Armonk, NY has developed and refined technologies that enable the caching of dynamic content. The technology has been included in a dynamic content caching solution for Java based (J2EE) applications, such as applications built using Sun Microsystems' JAVA 2 ENTERPRISE EDITION (™) application programming interface, running on Web-based application server configured as an IBM WEBSPHERE APPLICATION SERVER (™) version 5.0 and higher (WebSphere-type Application Server), where the built in dynamic caching server can be referred to as a dynacache, where a WebSphere-type Application server (WAS) can include any servers derived from or based upon the IBM WEB SPHERE APPLICATION SERVER (™) architecture (WebSphere cluster). The dynacache operates within a WAS Java Virtual Machine (JVM) to provide generalized Java object caching for use by various internal components. The dynacache can cache objects directly in WAS memory spaces with the ability to “overflow” objects to disk to avoid over-utilizing RAM. The dynacache memory can be distributed across multiple servers and managed as a single logical memory space. The dynacache can be optionally replicated across a cluster to avoid expensive regeneration on each server when multiple servers are used. As a service, the dynacache can be configured, tuned, and monitored through system management interfaces of the WAS.
In a simplified form, the dynacache can be conceptualized as a robust Hashtable capable of storing and retrieving Java objects from memory. The dynacache can manage entries by controlling growth using replacement and/or eviction algorithms. Entries within the cache can be managed by a policy based on the class of entry, such as servlet, Java Server Page (JSP), Enterprise Java Bean (EJB), command, and the like. The policy can be expressed in an electronic document, such as an Extensible Markup Language (XML) file (cachespec.xml).
The dynacache uses a facility called the Data Replication Service (DRS), which is a Java Messaging Service (JMS) based facility, to replicate cached data and propagate invalidate events within a WebSphere cluster. Invalidate events are events that remove an object from a cache and/or mark an object within the cache for removal. Additionally, to support caching performed outside of the J2EE application space, the dynacache can cooperate with a plurality of caches within the WAS through one or more cache adapters to actively trigger invalidations of cached Web content to registered adapters. Registered adaptors include a HTTP (Hypertext Transfer Protocol) plugin such as the IBM WEBSPHERE HTTP PLUGIN (™), an HTTP server such as the IBM HTTP SERVER (™) Fast Response Cache Accelerator (FRCA) cache, and a proxy server such as the IBM WEBSPHERE EDGE SERVER (™). Accordingly, some level of data sharing and synchronization can be performed between the dynacache and other caches and/or application servers.
There is currently no way, however, for components that do not run inside the WAS to directly access objects within the dynacache and data embedded within these objects. Objects within the dynacache are typically Java objects that include internal data and private methods for accessing the internal data.
By way of example, the dynacache can contain compiled speech grammars and a Java Grammar Compiler running inside an EJB can place grammars in the dynacache. An external software component can receive compiled grammar files from the WAS, where the files are generated from information within the dynacache. Even so, the external software component cannot directly access objects within the dynacache to obtain and/or manipulate the speech grammar information contained within the dynacache. This is true regardless of whether the external software component is a J2EE component external to the WAS or a component written in a non-Java language, such as a component written in the “C” programming language.